home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 40 / Amiga Format CD40 (1999-05-11)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-06].iso / -seriously_amiga- / sound / tracknameswindow / tnwcontrol.c < prev    next >
C/C++ Source or Header  |  1999-03-24  |  11KB  |  455 lines

  1. /*
  2.     Sets the name of the current track and
  3.     a lot of other things.
  4.  
  5.     Link with annomanno.o, /octacontrol.o
  6.    and /readstr.o to compile.
  7.  
  8.     Made by Kjetil S. Matheussen 19.12.98.
  9.  
  10.     Updated: 30.1.99. Changes: Insert track(s) in
  11.     current block didn't work properly. Fixed.
  12.  
  13.     Updated: 9.3.99. Changes: Option 6 and 7
  14.     read input in hex-notation, now changed to
  15.     read as decimal notation. Possible to copy
  16.     the tracknames of the current block to all
  17.     other blocks.
  18.  
  19.     e-mail: kjetilma@ifi.uio.no
  20.  
  21.     Address:
  22.     Kjetil S. Matheussen
  23.     5423 Sogn Studentby
  24.     0858 Oslo
  25.     Norway
  26. */
  27.  
  28.  
  29.  
  30. #include <string.h>
  31. #include "tracknameswindow.h"
  32. #include "/readstr.h"
  33.  
  34. OCTABASE ob;
  35. char *dosbase,*filehandle;
  36. char string[80];
  37. int stringlen;
  38.  
  39. UWORD currtrack,currblock,numtracks,numblocks,numlines,numpages;
  40.  
  41. void setname(void){
  42.     stringlen=strlen(string);
  43.     if(stringlen<10) {
  44.         settrackname(ob,"      ",currtrack,0,currblock);
  45.         settrackname(ob,string,currtrack,4-(stringlen/2),currblock);
  46.     }else{
  47.         settrackname(ob,string,currtrack,0,currblock);
  48.     }
  49.     settracknamedata(ob,currtrack);
  50. }
  51.  
  52.  
  53. void setname_1(void){
  54.     writestring(dosbase,filehandle,"New Name will be: ",18);
  55.     readstring(dosbase,filehandle,string,70);
  56.     if(*string!=NULL) setname();
  57. }
  58.  
  59.  
  60. char plaintrackname[15];
  61. UWORD block,track;
  62. void inserttrackplain(int trackstoinsert){
  63.     sendrexxword("ED_SETBLOCKTRACKS TRACKS ",trackstoinsert+numtracks,"");
  64.  
  65.     for(track=63;track>=currtrack+trackstoinsert;track--)
  66.         settrackname(
  67.             ob,
  68.             gettrackname(ob,track-trackstoinsert,block),
  69.             track,
  70.             0,
  71.             block
  72.         );
  73.  
  74.     for(track=0;track<trackstoinsert;track++){
  75.         sendrexx("RN_INSERTTRACK");
  76.         settrackname(
  77.             ob,
  78.             plaintrackname,
  79.             track+currtrack,
  80.             0,
  81.             block
  82.         );
  83.     }
  84.  
  85. }
  86.  
  87.  
  88. void insert_track_g(void){
  89.     int trackstoinsert=0;
  90.  
  91.     sprintf(string,"How many tracks (globally from current track): ");
  92.     writestring(dosbase,filehandle,string,strlen(string));
  93.     readstring(dosbase,filehandle,string,70);
  94.     sscanf(string,"%d",&trackstoinsert);
  95.     if(trackstoinsert>0 && trackstoinsert+numtracks<64){
  96.  
  97.         sprintf(string,"\n\nPlease wait..: %d",trackstoinsert);
  98.         writestring(dosbase,filehandle,string,strlen(string));
  99.  
  100.         numblocks=getnumblocks(ob);
  101.  
  102.         for(block=currblock;block<numblocks;block++){
  103.             inserttrackplain(trackstoinsert);
  104.             sendrexx("ED_GOTOBLOCK NEXT");
  105.         }
  106.  
  107.         sendrexxword("ED_GOTO BLOCK ",currblock,"");
  108.  
  109.         updatetnw(ob);
  110.     }
  111. }
  112.  
  113. void insert_track(void){
  114.     int trackstoinsert=0;
  115.  
  116.     sprintf(string,"How many tracks to insert (in current track): ");
  117.     writestring(dosbase,filehandle,string,strlen(string));
  118.     readstring(dosbase,filehandle,string,70);
  119.     sscanf(string,"%d",&trackstoinsert);
  120.     if(trackstoinsert>0 && trackstoinsert+numtracks<64){
  121.  
  122.         sprintf(string,"\n\nPlease wait..: %d",trackstoinsert);
  123.         writestring(dosbase,filehandle,string,strlen(string));
  124.  
  125.         block=currblock;
  126.         inserttrackplain(trackstoinsert);
  127.  
  128.         updatetnw(ob);
  129.     }
  130. }
  131.  
  132. void deletetrackname(void){
  133.     for(track=currtrack;track<63;track++)
  134.         settrackname(
  135.             ob,
  136.             gettrackname(ob,track+1,block),
  137.             track,
  138.             0,
  139.             block
  140.         );
  141.     updatetnw(ob);
  142. }
  143.  
  144. void copytracknamesblockplain(int fromblock,int toblock){
  145.     for(track=0;track<=63;track++)
  146.         settrackname(
  147.             ob,
  148.             gettrackname(ob,track,fromblock),
  149.             track,
  150.             0,
  151.             toblock
  152.         );
  153. }
  154.  
  155. void copytracknamesblock(void){
  156.     int toblock,lokke;
  157.  
  158.     sprintf(string,"Which block to copy (\"all\" for all blocks): ");
  159.     writestring(dosbase,filehandle,string,strlen(string));
  160.     readstring(dosbase,filehandle,string,70);
  161.     if(!strcmp("all",string)){
  162.         for(lokke=0;lokke<currblock;lokke++)
  163.             copytracknamesblockplain(currblock,lokke);
  164.         for(lokke=currblock+1;lokke<numblocks;lokke++)
  165.             copytracknamesblockplain(currblock,lokke);
  166.     }else{
  167.         sscanf(string,"%d",&toblock);
  168.  
  169.         if(toblock>0 && toblock!=currblock && toblock<=numblocks){
  170.             sendrexxword("ED_GOTO BLOCK ",toblock,"");
  171.             copytracknamesblockplain(currblock,toblock);
  172.             updatetnw(ob);
  173.         }
  174.     }
  175. }
  176.  
  177. void copyblock(void){
  178.     int toblock;
  179.  
  180.     sprintf(string,"Which block to copy: ");
  181.     writestring(dosbase,filehandle,string,strlen(string));
  182.     readstring(dosbase,filehandle,string,70);
  183.     sscanf(string,"%d",&toblock);
  184.  
  185.     if(toblock>0 && toblock!=currblock && toblock<=numblocks){
  186.         sendrexx("RN_COPY BLOCK");
  187.         sendrexxword("ED_GOTO BLOCK ",toblock,"");
  188.         sendrexx("RN_PASTE BLOCK");
  189.         copytracknamesblockplain(currblock,toblock);
  190.         updatetnw(ob);
  191.     }
  192. }
  193.  
  194.  
  195. void addblockplainnames(void){
  196.     FILE *plainnamestemp;
  197.     int block,track,track10,track1;
  198.  
  199.     plainnamestemp=fopen("nsm:plainnamestempcontrol","w");
  200.  
  201.     fprintf(plainnamestemp,"%s\n",gettrackname(ob,(UWORD)-2,0));
  202.     fprintf(plainnamestemp,"%s\n",gettrackname(ob,(UWORD)-1,0));
  203.  
  204.     for(block=0;block<numblocks;block++)
  205.         for(track=0;track<64;track++)
  206.             fprintf(plainnamestemp,"%s\n",gettrackname(ob,track,block));
  207.  
  208.     for(track10=0;track10<6;track10++)
  209.         for(track1=0;track1<10;track1++)
  210.             fprintf(plainnamestemp,"\03  %d%d     \n",track10,track1);
  211.  
  212.     fprintf(plainnamestemp,"\03  60     \n");
  213.     fprintf(plainnamestemp,"\03  61     \n");
  214.     fprintf(plainnamestemp,"\03  62     \n");
  215.     fprintf(plainnamestemp,"\03  63     \n");
  216.  
  217.     fclose(plainnamestemp);
  218.  
  219.     sendrexx("SG_LOADANNOTEXT \"nsm:plainnamestempcontrol\"");
  220.  
  221. }
  222.  
  223.  
  224. void insertblock(void){
  225.     char string2[80]="ED_SETBLOCKNAME \"";
  226.  
  227.     if(gettrackname(ob,10,numblocks)==0){
  228.         writestring(dosbase,filehandle,"\nPlease wait, initializing new tracknamesblock. ",50);
  229.         addblockplainnames();
  230.         writestring(dosbase,filehandle,"\nFinished! ",11);
  231.     }
  232.  
  233.     sendrexxword("ED_GOTO BLOCK ",currblock+1,"");
  234.  
  235.     sendrexxword3(
  236.         "ED_NEWBLOCK INSERT TRACKS ",numtracks,
  237.         " LINES ",numlines,
  238.         " PAGES ",numpages+1,""
  239.     );
  240.  
  241.  
  242.     writestring(dosbase,filehandle,"\n\nName of the new block: ",25);
  243.     readstring(dosbase,filehandle,string,50);
  244.     if(*string!=0){
  245.         strcat(string2,string);
  246.         strcat(string2,"\"");
  247.         sendrexx(string2);
  248.     }
  249.  
  250.     for(block=currblock;block<numblocks-1;block++)
  251.         copytracknamesblockplain(block,block+1);
  252.  
  253.     for(track=0;track<64;track++)
  254.         settrackname(
  255.             ob,
  256.             plaintrackname,
  257.             track,
  258.             0,
  259.             currblock+1
  260.         );
  261.  
  262.     updatetnw(ob);
  263. }
  264.  
  265. void appendblock(void){
  266.     char string2[80]="ED_SETBLOCKNAME \"";
  267.  
  268.     sendrexxword3(
  269.         "ED_NEWBLOCK LAST TRACKS ",numtracks,
  270.         " LINES ",numlines,
  271.         " PAGES ",numpages+1,""
  272.     );
  273.  
  274.     sendrexxword("ED_GOTO BLOCK ",numblocks,"");
  275.  
  276.     writestring(dosbase,filehandle,"\n\nName of the new block: ",25);
  277.     readstring(dosbase,filehandle,string,50);
  278.     if(*string!=0){
  279.         strcat(string2,string);
  280.         strcat(string2,"\"");
  281.         sendrexx(string2);
  282.     }
  283. }
  284.  
  285.  
  286. void resettrackname(void){
  287.     settrackname(
  288.         ob,
  289.         plaintrackname,
  290.         currtrack,
  291.         0,
  292.         currblock
  293.     );
  294.     updatetnw(ob);
  295. }
  296.  
  297. void deletecurrtracknames(void){
  298.     for(block=currblock+1;block<numblocks;block++)
  299.         copytracknamesblockplain(block,block-1);
  300.     updatetnw(ob);
  301. }
  302.  
  303. void deleteblock(void){
  304.     sendrexx("ED_DELETEBLOCK");
  305.     deletecurrtracknames();
  306. }
  307.  
  308. void swaptrack(void){
  309.  
  310.     if(currtrack<numtracks-1){
  311.  
  312.         sendrexx("RN_COPY TRACK");
  313.  
  314.         sendrexx("ED_GOTOTRACK NEXTNOTE");
  315.         sendrexx("RN_SWAP TRACK");
  316.  
  317.         sendrexx("ED_GOTOTRACK PREVNOTE");
  318.         sendrexx("RN_SWAP TRACK");
  319.  
  320.  
  321.         strcpy(string,gettrackname(ob,currtrack,currblock));
  322.         settrackname(
  323.             ob,
  324.             gettrackname(ob,currtrack+1,currblock),
  325.             currtrack,
  326.             0,
  327.             currblock
  328.         );
  329.  
  330.         settrackname(
  331.             ob,
  332.             string,
  333.             currtrack+1,
  334.             0,
  335.             currblock
  336.         );
  337.         updatetnw(ob);
  338.  
  339.     }
  340. }
  341.  
  342. void main(){
  343.     BLOCKBASE bb;
  344.  
  345.     char *ver="$VER: tnwcontrol 0.41b.300199 (30.1.99) by Kjetil S. Matheussen";
  346.  
  347.     if((ob=getoctabase())==0) goto exit;
  348.  
  349.     dosbase=opendoslibrary();
  350.     filehandle=openoctacon(dosbase,500,200);
  351.  
  352.     currtrack=getcurrtrack(ob);
  353.     currblock=getcurrblock(ob);
  354.     numblocks=getnumblocks(ob);
  355.     bb=getblockbase(ob,currblock);
  356.     numtracks=getnumtracks(bb);
  357.     numlines=getnumlines(bb);
  358.     numpages=getnumpages(bb);
  359.     sprintf(plaintrackname,"\03             ");
  360.  
  361.     if(strcmp(gettrackname(ob,(UWORD)-2,0),"QNM")){
  362.         sendrexx("SG_LOADANNOTEXT \"nsm:plainnames\"");
  363.         updatetnw(ob);
  364.     }
  365.  
  366.     sprintf(string,"Track %d has the current name: \"%s\"\n\n",currtrack,gettrackname(ob,currtrack,0));
  367.     writestring(dosbase,filehandle,string,strlen(string));
  368.  
  369.     sprintf(string,"Choose option: (write number and press return)\n\n");
  370.     writestring(dosbase,filehandle,string,strlen(string));
  371.  
  372.     sprintf(string,"1. Set trackname (default, just write name)\n");
  373.     writestring(dosbase,filehandle,string,strlen(string));
  374.  
  375.     sprintf(string,"2. Insert track(s) in all blocks from current block\n");
  376.     writestring(dosbase,filehandle,string,strlen(string));
  377.  
  378.     sprintf(string,"3. Insert track(s) in current block\n");
  379.     writestring(dosbase,filehandle,string,strlen(string));
  380.  
  381.     sprintf(string,"4. Delete current trackname in current block\n");
  382.     writestring(dosbase,filehandle,string,strlen(string));
  383.  
  384.     sprintf(string,"5. Copy current block to another block\n");
  385.     writestring(dosbase,filehandle,string,strlen(string));
  386.  
  387.     sprintf(string,"6. Copy just tracknames of current block to another block\n");
  388.     writestring(dosbase,filehandle,string,strlen(string));
  389.  
  390.     sprintf(string,"7. Insert New block. \n");
  391.     writestring(dosbase,filehandle,string,strlen(string));
  392.  
  393.     sprintf(string,"8. Append New block\n");
  394.     writestring(dosbase,filehandle,string,strlen(string));
  395.  
  396.     sprintf(string,"9. Delete Current block\n");
  397.     writestring(dosbase,filehandle,string,strlen(string));
  398.  
  399.     sprintf(string,"A. Delete just the tracknames of the current block\n");
  400.     writestring(dosbase,filehandle,string,strlen(string));
  401.  
  402.     sprintf(string,"B. Delete Last block\n");
  403.     writestring(dosbase,filehandle,string,strlen(string));
  404.  
  405.     sprintf(string,"C. Swap current track with next\n");
  406.     writestring(dosbase,filehandle,string,strlen(string));
  407.  
  408.     sprintf(string,"D. Resets the current trackname to default\n");
  409.     writestring(dosbase,filehandle,string,strlen(string));
  410.  
  411. /*
  412.     sprintf(string,"\n");
  413.     writestring(dosbase,filehandle,string,strlen(string));
  414.     sprintf(string,"\n");
  415.     writestring(dosbase,filehandle,string,strlen(string));
  416.     sprintf(string,"\n");
  417.     writestring(dosbase,filehandle,string,strlen(string));
  418. */
  419.  
  420.     sprintf(string,"\n> ");
  421.     writestring(dosbase,filehandle,string,strlen(string));
  422.  
  423.     readstring(dosbase,filehandle,string,70);
  424.  
  425.  
  426.     if(!strcmp(string,"1")){setname_1();goto close;}
  427.     if(!strcmp(string,"2")){insert_track_g();goto close;}
  428.     if(!strcmp(string,"3")){insert_track();goto close;}
  429.     if(!strcmp(string,"4")){block=currblock;deletetrackname();goto close;}
  430.     if(!strcmp(string,"5")){copyblock();goto close;}
  431.     if(!strcmp(string,"6")){copytracknamesblock();goto close;}
  432.     if(!strcmp(string,"7")){insertblock();goto close;}
  433.     if(!strcmp(string,"8")){appendblock();goto close;}
  434.     if(!strcmp(string,"9")){deleteblock();goto close;}
  435.     if(!strcmp(string,"a") || !strcmp(string,"A") ){deletecurrtracknames();goto close;}
  436.     if(!strcmp(string,"b") || !strcmp(string,"B") ){sendrexx("ED_DELETEBLOCK LAST");goto close;}
  437.     if(!strcmp(string,"c") || !strcmp(string,"C") ){swaptrack();goto close;}
  438.     if(!strcmp(string,"d") || !strcmp(string,"D") ){resettrackname();goto close;}
  439.  
  440. /*
  441.     if(!strcmp(string,"C")){goto close;}
  442.     if(!strcmp(string,"D")){goto close;}
  443. */
  444.  
  445.     if(*string!=NULL) setname();
  446.  
  447. close:
  448.     closefile(dosbase,filehandle);
  449.     closedoslibrary(dosbase);
  450.  
  451. exit:
  452. }
  453.  
  454.  
  455.